package modelo;

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;

import dao.*;
import excepciones.DaoException;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Main {
	
	public void init1(){
	    Usuario result ;
    	try {	    		
	            
    		Evaluacion evaluacion;
			evaluacion = new Evaluacion();
			
			//Guardo la fecha
			SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy-MM-dd");
			String strFecha = "2008-02-02";
			Date objFecha = null;
			try {

			objFecha = formatoDelTexto.parse(strFecha);

			} catch (ParseException ex) {

				ex.printStackTrace();

			} catch (java.text.ParseException e) {

				e.printStackTrace();
			}				
			evaluacion.setFecha(objFecha);
			
			
			//evaluacion.setUnUsuario(this.loginBean.getObjUsuario());
			
			//Criterios
			
			Criterio c1 = new Criterio();
			c1.setNombre("Pertenencia y Relevancia");
			c1.setPuntaje(5);
			c1.setTexto("river");
			
			/*
			Criterio c2 = new Criterio();
			c2.setNombre("Recursos Humanos");
			c2.setPuntaje(this.puntaje1);
			c2.setTexto(this.criterio1);
			
			Criterio c3 = new Criterio();
			c3.setNombre("Metodología");
			c3.setPuntaje(this.puntaje1);
			c3.setTexto(this.criterio1);
			
			Criterio c4 = new Criterio();
			c4.setNombre("Resultados");
			c4.setPuntaje(this.puntaje1);
			c4.setTexto(this.criterio1);
			
			Criterio c5 = new Criterio();
			c5.setNombre("Autoevaluacion");
			c5.setPuntaje(this.puntaje1);
			c5.setTexto(this.criterio1);
			*/
			
			List<Criterio> l = new ArrayList<Criterio>();
			l.add(c1);
			evaluacion.setCriterios(l);
			/*
			evaluacion.getCriterios().add(c2);
			evaluacion.getCriterios().add(c3);
			evaluacion.getCriterios().add(c4);
			evaluacion.getCriterios().add(c5);
			*/
			
			EvaluacionDao evaluacionDao = new EvaluacionDao(evaluacion);
			evaluacionDao.create();
			evaluacionDao.closeEntityManager();
	            
	            

         }
         catch (Exception e)
         {
            e.printStackTrace();
         }
       	
        
    }
	
	public void traerUsuario(){
		try {
			UsuarioDao usrDao = new UsuarioDao();		
			Usuario usr = usrDao.encontrarPorUsuario("Administrador");
			System.out.println(usr.getPerfiles().size());
		} catch (DaoException e) {		
			e.printStackTrace();
		}
	}
   
   public void crear(){
    
    	try {
    		String perfiles[] = {"Administrador", "Integrante", "Evaluador", "Director", "Gerencial"};
    		System.out.print(perfiles.length);
    		for (int i = 0; i < perfiles.length; i++) {
				String element = perfiles[i];
				
				String className = "modelo."+element;
				Perfil perfil = (Perfil)Class.forName(className).newInstance();
				perfil.setNombre(element);
				System.out.print(perfil);
				
				PerfilDao perfilDao = new PerfilDao(perfil);
				perfilDao.create();
			
				Persona perAdmin = new Persona();
	    		perAdmin.setApellido(element);
	    		perAdmin.setNombre(element);
	    		perAdmin.setDni(1111);
	    		PersonaDao perAdminDao = new PersonaDao(perAdmin);
	    		perAdminDao.create();
	    		perAdminDao.closeEntityManager();
	    		
	    		
	            Usuario usr = new Usuario();
	            usr.setUsuario(element);
	            usr.setPassword("1234");
	            usr.setUnaPersona(perAdmin);
	            Set <Perfil> misPerfiles = new HashSet<Perfil>();
	            misPerfiles.add(perfil);
	            if (element == "Director"){
	            	PerfilDao perfDao = new PerfilDao();
	        		Perfil perf = perfDao.encontrarPorNombre("Administrador");
	        		misPerfiles.add(perf);
	        		perfDao.closeEntityManager();
	            }
	            
	            usr.setPerfiles(misPerfiles);
	           
	            UsuarioDao usrDao = new UsuarioDao(usr);
	            //usrDao.create();
	            usrDao.update();
	            usrDao.closeEntityManager();
				
			}
    		// Agrego Actividad
    		
    		Actividad actividad = new Actividad();
    		actividad.setNombre("Actividad 1");
    		Date date = Calendar.getInstance().getTime();    		    		
    		actividad.setFecha_inicio(date);
    		ActividadDao actividadDao = new ActividadDao(actividad);
    		actividadDao.create();
    		actividadDao.closeEntityManager();
    		
    		ArrayList<Actividad> actividades = new ArrayList<Actividad>();
    		actividades.add(actividad);
    		
    		// Agrego Area Tematica
    		AreaTematica areaTematica = new AreaTematica();
    		areaTematica.setNombre("Area Tematica 1");
    		AreaTematicaDao areaTematicaDao = new AreaTematicaDao(areaTematica);
    		areaTematicaDao.create();
    		areaTematicaDao.closeEntityManager();
    		
    		// Agrego Unidades Academicas
    		UnidadAcademica unidadAcademica = new UnidadAcademica();
    		unidadAcademica.setNombre("UNQ");
    		UnidadAcademicaDao unidadAcademicaDao = new UnidadAcademicaDao(unidadAcademica);
    		unidadAcademicaDao.create();
    		unidadAcademicaDao.closeEntityManager();
    		
    		UnidadAcademica unidadAcademicaUBA = new UnidadAcademica();
    		unidadAcademicaUBA.setNombre("UBA");
    		UnidadAcademicaDao unidadAcademicaDaoUBA = new UnidadAcademicaDao(unidadAcademicaUBA);
    		unidadAcademicaDaoUBA.create();
    		unidadAcademicaDaoUBA.closeEntityManager();
    		
    		// AGREGO DESTINATARIOS
    		Destinatario d1 = new Destinatario();
    		d1.setNombre("Unaj");
    		d1.setDireccion("Florencio Varela");
    		DestinatarioDao destinatarioDao = new DestinatarioDao(d1);
    		destinatarioDao.create();
    		destinatarioDao.closeEntityManager();
    		
    		Destinatario d2 = new Destinatario();
    		d2.setNombre("Unlp");
    		d2.setDireccion("La Plata");
    		DestinatarioDao destinatarioDao2 = new DestinatarioDao(d2);
    		destinatarioDao2.create();
    		destinatarioDao2.closeEntityManager();
    		
    		ArrayList<Destinatario> destinatarios = new ArrayList<Destinatario>();
    		destinatarios.add(d1);
    		destinatarios.add(d2);
    		
    		//ESTADOS 
    		Estado estado_abierto = new Estado();
    		estado_abierto.setClave("abierto");
    		estado_abierto.setNombre("Abierto");
    		EstadoDao estadoDao = new EstadoDao(estado_abierto);
    		estadoDao.create();
    		estadoDao.closeEntityManager();
    		
    		
    		
    		Estado estado_cerrado = new Estado();
    		estado_cerrado.setClave("cerrado");
    		estado_cerrado.setNombre("Cerrado");
    		EstadoDao estadoDao2 = new EstadoDao(estado_cerrado);
    		estadoDao2.create();
    		estadoDao2.closeEntityManager();
    		
    		Estado estado_en_evaluacion = new Estado();
    		estado_en_evaluacion.setClave("en_evaluacion");
    		estado_en_evaluacion.setNombre("En Evaluacion");
    		EstadoDao estadoDao1 = new EstadoDao(estado_en_evaluacion);
    		estadoDao1.create();
    		estadoDao1.closeEntityManager();
    		
    		Estado estado_evaluado = new Estado();
    		estado_evaluado.setClave("evaluado");
    		estado_evaluado.setNombre("Evaluado");
    		EstadoDao estadoDao3 = new EstadoDao(estado_evaluado);
    		estadoDao3.create();
    		estadoDao3.closeEntityManager();
    		
    		//AGREGO PROYECTO
    		Proyecto p = new Proyecto();
    		UsuarioDao usrDao = new UsuarioDao();
    		p.setPerfil_director(usrDao.findById((long) 4));
    		PersonaDao perAdminDao = new PersonaDao();    		
    		
    		ArrayList<AreaTematica> areas = new ArrayList<AreaTematica>();
    		areas.add(areaTematica);
    		p.setAreas_tematicas(areas);
    		
    		
    		ArrayList<Persona> coordinadores = new ArrayList<Persona>();
    		coordinadores.add(perAdminDao.findById((long) 2));    		
    		p.setCoordinadores(coordinadores);
    		
    		ArrayList<Usuario> integrantes = new ArrayList<Usuario>();
    					
    		integrantes.add(usrDao.findById((long) 2));
    		integrantes.add(usrDao.findById((long) 4));
    		p.setIntegrantes(integrantes);    		
    		p.setMis_destinatarios(destinatarios);
    		p.setMi_estado(estado_abierto);
    		p.setMis_actividades(actividades);
    		perAdminDao.closeEntityManager();
    		
    		p.setObjetivo_general("Ejemplo");
			p.setDenominacion("Ejemplo");
			p.setSintesis("Ejemplo");
			p.setObjetivos_especificos("Ejemplo");
			p.setResultados_esperados("Ejemplo");
			p.setMetas("Ejemplo");
			p.setMetodologia("Ejemplo");
			p.setAutoevaluacion("Ejemplo");
			p.setSostenibilidad("Ejemplo");
			p.setRelevancia("Ejemplo");
			p.setOrganizaciones_coparticipes("Ejemplo");
    		
    		ProyectoDao proyectoDao = new ProyectoDao(p);
			proyectoDao.update();
			proyectoDao.closeEntityManager();  		
    		
            System.out.println("Fin Creacion de datos prueba");
         }
         catch (Exception e)
         {
            e.printStackTrace();
         }
       	
    }
   public void pruebas(){
	   
	   ProyectoDao proyDao = new ProyectoDao();
	   
	   try {
		   Proyecto proyecto  = proyDao.findById((long)2);
		   proyDao.delete();
	   } catch (DaoException e) {		   
		   e.printStackTrace();
	   }
	   
   }
    
    public static void main(String[] args) {
        
        Main main = new Main();
        
        try {
            // do some persistence stuff
        	main.crear();        	
        	//main.traerUsuario();
        	//main.pruebas();
			
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {	
            //main.shutdown();
        }
        System.exit(0);
    }   
}